package de.hdu.mfz.model;


import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;




/**
 * @author Katharina
 * Date: 21.04.2012
 * Hat ein Abfahrts- und ein Enddatum
 * Hat einen Fahrer (Referenz auf User)
 * Hat n Mitfahrer (Liste mit Referenz auf User).
 * Hat 2...n Routenpunkte. Wobei der erste der Startort ist und der letzte der Zielort. 
 * Dazwischen kann es n Zwischenhalte geben.
 */

@Entity
public class Route {
	@Id
	@GeneratedValue
	private int routeId;
	private Date startzeit; 
	private Date zielzeit;
	@ManyToOne
    private User fahrer;
	private int plaetze;
	
	//FetchType.EAGER legt fest, dass sofort alle Routepunkte aus der Datenbank gelesen werden.
	//cascade = {CascadeType.ALL} legt fest, dass alle Routepunkte beim Speichern der Route ebenfalls gespeichert werden
	@OneToMany(cascade = {CascadeType.ALL}, mappedBy="route", fetch=FetchType.EAGER)
	@OrderBy("pos")
	//Liste verwenden und nicht Set, da Sortierung wichtig
	private List<Routenpunkt> liste = new  ArrayList<Routenpunkt>(0);
	
	
	public Route(Date startzeit, Date zielzeit, int plaetze, User fahrer){ 
		this.startzeit = startzeit; 
		this.zielzeit  = zielzeit;
		this.plaetze   = plaetze;
		this.fahrer    = fahrer;
	}
	
	public Route() {
		super();
	}

	public int getRouteId() {
		return routeId;
	}

	public void setRouteId(int routeId) {
		this.routeId = routeId;
	}

	public Date getStartzeit() {
		return startzeit;
	}

	public void setStartzeit(Date startzeit) {
		this.startzeit = startzeit;
	}

	public Date getZielzeit() {
		return zielzeit;
	}

	public void setZielzeit(Date zielzeit) {
		this.zielzeit = zielzeit;
	}

	public int getPlaetze() {
		return plaetze;
	}

	public void setPlaetze(int plaetze) {
		this.plaetze = plaetze;
	}

	public List<Routenpunkt> getListe() {
		return liste;
	}

	public void setListe(List<Routenpunkt> liste) {
		this.liste = liste;
	}

	public User getFahrer() {
		return fahrer;
	}

	public void setFahrer(User fahrer) {
		this.fahrer = fahrer;
	}
}	